/**
 * https://leetcode-cn.com/problems/subsets/
 * 子集
 * 给你一个整数数组 nums ，数组中的元素 互不相同 。返回该数组所有可能的子集（幂集）。解集 不能 包含重复的子集。你可以按 任意顺序 返回解集。
 * @param nums
 */
const subsets = (nums: number[]): number[][] => {
  const ans: number[][] = [];

  const len = nums.length;

  const cur: number[] = [];
  /**
   * 深度优先遍历
   * @param level
   */
  const dfs = (level: number) => {
    if (level === len) {
      // 开始收集
      ans.push([...cur]);
      return;
    }

    cur.push(nums[level]);
    dfs(level + 1);
    // 清除一个
    cur.pop();
    // 继续把尾部处理后的数组放入答案中
    dfs(level + 1);
  };

  dfs(0);

  return ans;
};
subsets([1, 2, 3]);
